home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / ab20 / ab20_archive / sounds / tools / protracker1.1a.lzh / PT-Play.s next >
Text File  |  1990-12-30  |  22KB  |  1,141 lines

  1. ;********************************************
  2. ;* ----- Protracker V1.1A Playroutine ----- *
  3. ;* Lars "Zap" Hamre/Amiga Freelancers 1990  *
  4. ;* Bekkeliveien 10, N-2010 STRØMMEN, Norway *
  5. ;********************************************
  6.  
  7. ; VBlank Version A:
  8. ; Call mt_init to initialize the routine, then call mt_music on
  9. ; each vertical blank (50 Hz). To end the song and turn off all
  10. ; voices, call mt_end.
  11.  
  12. ; This playroutine is not very fast, optimized or well commented,
  13. ; but all the new commands in PT1.1A should work alright.
  14. ; If it's not good enough, you'll have to change it yourself.
  15. ; We'll try to code a faster routine soon...
  16.  
  17. ; Changes from V1.0C playroutine:
  18. ; Vibrato depth changed to be compatible with Noisetracker 2.0.
  19. ; You'll have to double all vib. depths on old PT modules.
  20. ; Funk Repeat changed to Invert Loop.
  21.  
  22. DMAWait = 280 ; Set this as low as possible without losing low notes.
  23.  
  24. n_cmd        EQU    2  ; W
  25. n_cmdlo        EQU    3  ; low B of n_cmd
  26. n_start        EQU    4  ; L
  27. n_length    EQU    8  ; W
  28. n_loopstart    EQU    10 ; L
  29. n_replen    EQU    14 ; W
  30. n_period    EQU    16 ; W
  31. n_finetune    EQU    18 ; B
  32. n_volume    EQU    19 ; B
  33. n_dmabit    EQU    20 ; W
  34. n_toneportdirec    EQU    22 ; B
  35. n_toneportspeed    EQU    23 ; B
  36. n_wantedperiod    EQU    24 ; W
  37. n_vibratocmd    EQU    26 ; B
  38. n_vibratopos    EQU    27 ; B
  39. n_tremolocmd    EQU    28 ; B
  40. n_tremolopos    EQU    29 ; B
  41. n_wavecontrol    EQU    30 ; B
  42. n_glissfunk    EQU    31 ; B
  43. n_sampleoffset    EQU    32 ; B
  44. n_pattpos    EQU    33 ; B
  45. n_loopcount    EQU    34 ; B
  46. n_funkoffset    EQU    35 ; B
  47. n_wavestart    EQU    36 ; L
  48. n_reallength    EQU    40 ; W
  49.  
  50. mt_init    LEA    mt_data,a0
  51.     MOVE.L    A0,mt_SongDataPtr
  52.     LEA    mt_mulu(PC),A1
  53.     MOVE.L    A0,D0
  54.     ADDQ.L    #8,D0
  55.     ADDQ.L    #4,D0
  56.     MOVEQ    #$1F,D1
  57.     MOVEQ    #$1E,D3
  58. mt_lop4    MOVE.L    D0,(A1)+
  59.     ADD.L    D3,D0
  60.     DBRA    D1,mt_lop4
  61.     LEA    $3B8(A0),A1
  62.     MOVEQ    #127,D0
  63.     MOVEQ    #0,D1
  64.     MOVEQ    #0,D2
  65. mt_lop2 MOVE.B    (A1)+,D1
  66.     CMP.B    D2,D1
  67.     BLE.S    mt_lop
  68.     MOVE.L    D1,D2
  69. mt_lop    DBRA    D0,mt_lop2
  70.     ADDQ.W    #1,d2
  71.     ASL.L    #8,D2
  72.     ASL.L    #2,D2
  73.     LEA    4(A1,D2.L),A2
  74.     LEA    mt_samplestarts(PC),A1
  75.     ADD.W    #$2A,A0
  76.     MOVEQ    #$1E,D0
  77. mt_lop3 CLR.L    (A2)
  78.     MOVE.L    A2,(A1)+
  79.     MOVEQ    #0,D1
  80.     MOVE.B    D1,2(A0)
  81.     MOVE.W    (A0),D1
  82.     ASL.L    #1,D1
  83.     ADD.L    D1,A2
  84.     ADD.L    D3,A0
  85.     DBRA    D0,mt_lop3
  86.     LEA    mt_speed(PC),A1
  87.     MOVE.B    #6,(A1)
  88.     OR.B    #2,$BFE001
  89.     MOVEQ    #0,D0
  90.     LEA    $DFF000,A0
  91.     MOVE.W    D0,$A8(A0)
  92.     MOVE.W    D0,$B8(A0)
  93.     MOVE.W    D0,$C8(A0)
  94.     MOVE.W    D0,$D8(A0)
  95.     MOVE.B    D0,mt_songpos-mt_speed(A1)
  96.     MOVE.B    D0,mt_counter-mt_speed(A1)
  97.     MOVE.W    D0,mt_pattpos-mt_speed(A1)
  98.     RTS
  99.  
  100. mt_end    MOVEQ    #0,D0
  101.     LEA    $DFF000,A0
  102.     MOVE.W    D0,$A8(A0)
  103.     MOVE.W    D0,$B8(A0)
  104.     MOVE.W    D0,$C8(A0)
  105.     MOVE.W    D0,$D8(A0)
  106.     MOVE.W    #$F,$DFF096
  107.     RTS
  108.  
  109. mt_music
  110.     ADDQ.B    #1,mt_counter
  111.     MOVE.B    mt_counter(PC),D0
  112.     CMP.B    mt_speed(PC),D0
  113.     BLO.S    mt_NoNewNote
  114.     CLR.B    mt_counter
  115.     TST.B    mt_PattDelTime2
  116.     BEQ.S    mt_GetNewNote
  117.     BSR.S    mt_NoNewAllChannels
  118.     BRA    mt_dskip
  119.  
  120. mt_NoNewNote
  121.     BSR.S    mt_NoNewAllChannels
  122.     BRA    mt_NoNewPosYet
  123.  
  124. mt_NoNewAllChannels
  125.     LEA    $DFF0A0,A5
  126.     LEA    mt_chan1temp(PC),A6
  127.     BSR    mt_CheckEfx
  128.     LEA    $DFF0B0,A5
  129.     LEA    mt_chan2temp(PC),A6
  130.     BSR    mt_CheckEfx
  131.     LEA    $DFF0C0,A5
  132.     LEA    mt_chan3temp(PC),A6
  133.     BSR    mt_CheckEfx
  134.     LEA    $DFF0D0,A5
  135.     LEA    mt_chan4temp(PC),A6
  136.     BRA    mt_CheckEfx
  137.  
  138. mt_GetNewNote
  139.     MOVE.L    mt_SongDataPtr(PC),A0
  140.     LEA    12(A0),A3
  141.     LEA    952(A0),A2    ;pattpo
  142.     LEA    1084(A0),A0    ;patterndata
  143.     MOVEQ    #0,D0
  144.     MOVEQ    #0,D1
  145.     MOVE.B    mt_SongPos(PC),D0
  146.     MOVE.B    (A2,D0.W),D1
  147.     ASL.L    #8,D1
  148.     ASL.L    #2,D1
  149.     ADD.W    mt_PattPos(PC),D1
  150.     CLR.W    mt_DMACONtemp
  151.  
  152.     LEA    $DFF0A0,A5
  153.     LEA    mt_chan1temp(PC),A6
  154.     BSR.S    mt_PlayVoice
  155.     LEA    $DFF0B0,A5
  156.     LEA    mt_chan2temp(PC),A6
  157.     BSR.S    mt_PlayVoice
  158.     LEA    $DFF0C0,A5
  159.     LEA    mt_chan3temp(PC),A6
  160.     BSR.S    mt_PlayVoice
  161.     LEA    $DFF0D0,A5
  162.     LEA    mt_chan4temp(PC),A6
  163.     BSR.S    mt_PlayVoice
  164.     BRA    mt_SetDMA
  165.  
  166. mt_PlayVoice
  167.     TST.L    (A6)
  168.     BNE.S    mt_plvskip
  169.     MOVE.W    n_period(A6),6(A5)
  170. mt_plvskip
  171.     MOVE.L    (A0,D1.L),(A6)
  172.     ADDQ.L    #4,D1
  173.     MOVEQ    #0,D2
  174.     MOVE.B    n_cmd(A6),D2
  175.     LSR.B    #4,D2
  176.     MOVE.B    (A6),D0
  177.     AND.B    #$F0,D0
  178.     OR.B    D0,D2
  179.     BEQ    mt_SetRegs
  180.     MOVEQ    #0,D3
  181.     LEA    mt_SampleStarts(PC),A1
  182.     MOVE    D2,D4
  183.     SUBQ.L    #1,D2
  184.     ASL.L    #2,D2
  185.     MULU    #30,D4
  186.     MOVE.L    (A1,D2.L),n_start(A6)
  187.     MOVE.W    (A3,D4.L),n_length(A6)
  188.     MOVE.W    (A3,D4.L),n_reallength(A6)
  189.     MOVE.B    2(A3,D4.L),n_finetune(A6)
  190.     MOVE.B    3(A3,D4.L),n_volume(A6)
  191.     MOVE.W    4(A3,D4.L),D3 ; Get repeat
  192.     TST.W    D3
  193.     BEQ.S    mt_NoLoop
  194.     MOVE.L    n_start(A6),D2    ; Get start
  195.     ASL.W    #1,D3
  196.     ADD.L    D3,D2        ; Add repeat
  197.     MOVE.L    D2,n_loopstart(A6)
  198.     MOVE.L    D2,n_wavestart(A6)
  199.     MOVE.W    4(A3,D4.L),D0    ; Get repeat
  200.     ADD.W    6(A3,D4.L),D0    ; Add replen
  201.     MOVE.W    D0,n_length(A6)
  202.     MOVE.W    6(A3,D4.L),n_replen(A6)    ; Save replen
  203.     MOVEQ    #0,D0
  204.     MOVE.B    n_volume(A6),D0
  205.     MOVE.W    D0,8(A5)    ; Set volume
  206.     BRA.S    mt_SetRegs
  207.  
  208. mt_NoLoop
  209.     MOVE.L    n_start(A6),D2
  210.     ADD.L    D3,D2
  211.     MOVE.L    D2,n_loopstart(A6)
  212.     MOVE.L    D2,n_wavestart(A6)
  213.     MOVE.W    6(A3,D4.L),n_replen(A6)    ; Save replen
  214.     MOVEQ    #0,D0
  215.     MOVE.B    n_volume(A6),D0
  216.     MOVE.W    D0,8(A5)    ; Set volume
  217. mt_SetRegs
  218.     MOVE.W    (A6),D0
  219.     AND.W    #$0FFF,D0
  220.     BEQ    mt_CheckMoreEfx    ; If no note
  221.     MOVE.W    2(A6),D0
  222.     AND.W    #$0FF0,D0
  223.     CMP.W    #$0E50,D0
  224.     BEQ.S    mt_DoSetFineTune
  225.     MOVE.B    2(A6),D0
  226.     AND.B    #$0F,D0
  227.     CMP.B    #3,D0    ; TonePortamento
  228.     BEQ.S    mt_ChkTonePorta
  229.     CMP.B    #5,D0
  230.     BEQ.S    mt_ChkTonePorta
  231.     CMP.B    #9,D0    ; Sample Offset
  232.     BNE.S    mt_SetPeriod
  233.     BSR    mt_CheckMoreEfx
  234.     BRA.S    mt_SetPeriod
  235.  
  236. mt_DoSetFineTune
  237.     BSR    mt_SetFineTune
  238.     BRA.S    mt_SetPeriod
  239.  
  240. mt_ChkTonePorta
  241.     BSR    mt_SetTonePorta
  242.     BRA    mt_CheckMoreEfx
  243.  
  244. mt_SetPeriod
  245.     MOVEM.L    D0-D1/A0-A1,-(SP)
  246.     MOVE.W    (A6),D1
  247.     AND.W    #$0FFF,D1
  248.     LEA    mt_PeriodTable(PC),A1
  249.     MOVEQ    #0,D0
  250.     MOVEQ    #36,D7
  251. mt_ftuloop
  252.     CMP.W    (A1,D0.W),D1
  253.     BHS.S    mt_ftufound
  254.     ADDQ.L    #2,D0
  255.     DBRA    D7,mt_ftuloop
  256. mt_ftufound
  257.     MOVEQ    #0,D1
  258.     MOVE.B    n_finetune(A6),D1
  259.     MULU    #36*2,D1
  260.     ADD.L    D1,A1
  261.     MOVE.W    (A1,D0.W),n_period(A6)
  262.     MOVEM.L    (SP)+,D0-D1/A0-A1
  263.  
  264.     MOVE.W    2(A6),D0
  265.     AND.W    #$0FF0,D0
  266.     CMP.W    #$0ED0,D0 ; Notedelay
  267.     BEQ    mt_CheckMoreEfx
  268.  
  269.     MOVE.W    n_dmabit(A6),$DFF096
  270.     BTST    #2,n_wavecontrol(A6)
  271.     BNE.S    mt_vibnoc
  272.     CLR.B    n_vibratopos(A6)
  273. mt_vibnoc
  274.     BTST    #6,n_wavecontrol(A6)
  275.     BNE.S    mt_trenoc
  276.     CLR.B    n_tremolopos(A6)
  277. mt_trenoc
  278.     MOVE.L    n_start(A6),(A5)    ; Set start
  279.     MOVE.W    n_length(A6),4(A5)    ; Set length
  280.     MOVE.W    n_period(A6),D0
  281.     MOVE.W    D0,6(A5)        ; Set period
  282.     MOVE.W    n_dmabit(A6),D0
  283.     OR.W    D0,mt_DMACONtemp
  284.     BRA    mt_CheckMoreEfx
  285.  
  286. mt_SetDMA
  287.     MOVE.W    #DMAWait,D0
  288. mt_WaitDMA
  289.     DBRA    D0,mt_WaitDMA
  290.     MOVE.W    mt_DMACONtemp(PC),D0
  291.     OR.W    #$8000,D0
  292.     MOVE.W    D0,$DFF096
  293.     MOVE.W    #DMAWait,D0
  294. mt_WaitDMA2
  295.     DBRA    D0,mt_WaitDMA2
  296.  
  297.     LEA    $DFF000,A5
  298.     LEA    mt_chan4temp(PC),A6
  299.     MOVE.L    n_loopstart(A6),$D0(A5)
  300.     MOVE.W    n_replen(A6),$D4(A5)
  301.     LEA    mt_chan3temp(PC),A6
  302.     MOVE.L    n_loopstart(A6),$C0(A5)
  303.     MOVE.W    n_replen(A6),$C4(A5)
  304.     LEA    mt_chan2temp(PC),A6
  305.     MOVE.L    n_loopstart(A6),$B0(A5)
  306.     MOVE.W    n_replen(A6),$B4(A5)
  307.     LEA    mt_chan1temp(PC),A6
  308.     MOVE.L    n_loopstart(A6),$A0(A5)
  309.     MOVE.W    n_replen(A6),$A4(A5)
  310.  
  311. mt_dskip
  312.     ADD.W    #16,mt_PattPos
  313.     MOVE.B    mt_PattDelTime,D0
  314.     BEQ.S    mt_dskc
  315.     MOVE.B    D0,mt_PattDelTime2
  316.     CLR.B    mt_PattDelTime
  317. mt_dskc    TST.B    mt_PattDelTime2
  318.     BEQ.S    mt_dska
  319.     SUBQ.B    #1,mt_PattDelTime2
  320.     BEQ.S    mt_dska
  321.     SUB.W    #16,mt_PattPos
  322. mt_dska    TST.B    mt_PBreakFlag
  323.     BEQ.S    mt_nnpysk
  324.     SF    mt_PBreakFlag
  325.     MOVEQ    #0,D0
  326.     MOVE.B    mt_PBreakPos(PC),D0
  327.     CLR.B    mt_PBreakPos
  328.     LSL.W    #4,D0
  329.     MOVE.W    D0,mt_PattPos
  330. mt_nnpysk
  331.     CMP.W    #1024,mt_PattPos
  332.     BLO.S    mt_NoNewPosYet
  333. mt_NextPosition    
  334.     MOVEQ    #0,D0
  335.     MOVE.B    mt_PBreakPos(PC),D0
  336.     LSL.W    #4,D0
  337.     MOVE.W    D0,mt_PattPos
  338.     CLR.B    mt_PBreakPos
  339.     CLR.B    mt_PosJumpFlag
  340.     ADDQ.B    #1,mt_SongPos
  341.     AND.B    #$7F,mt_SongPos
  342.     MOVE.B    mt_SongPos(PC),D1
  343.     MOVE.L    mt_SongDataPtr(PC),A0
  344.     CMP.B    950(A0),D1
  345.     BLO.S    mt_NoNewPosYet
  346.     CLR.B    mt_SongPos
  347. mt_NoNewPosYet    
  348.     TST.B    mt_PosJumpFlag
  349.     BNE.S    mt_NextPosition
  350.     RTS
  351.  
  352. mt_CheckEfx
  353.     BSR    mt_UpdateFunk
  354.     MOVE.W    n_cmd(A6),D0
  355.     AND.W    #$0FFF,D0
  356.     BEQ.S    mt_PerNop
  357.     MOVE.B    n_cmd(A6),D0
  358.     AND.B    #$0F,D0
  359.     BEQ.S    mt_Arpeggio
  360.     CMP.B    #1,D0
  361.     BEQ    mt_PortaUp
  362.     CMP.B    #2,D0
  363.     BEQ    mt_PortaDown
  364.     CMP.B    #3,D0
  365.     BEQ    mt_TonePortamento
  366.     CMP.B    #4,D0
  367.     BEQ    mt_Vibrato
  368.     CMP.B    #5,D0
  369.     BEQ    mt_TonePlusVolSlide
  370.     CMP.B    #6,D0
  371.     BEQ    mt_VibratoPlusVolSlide
  372.     CMP.B    #$E,D0
  373.     BEQ    mt_E_Commands
  374. SetBack    MOVE.W    n_period(A6),6(A5)
  375.     CMP.B    #7,D0
  376.     BEQ    mt_Tremolo
  377.     CMP.B    #$A,D0
  378.     BEQ    mt_VolumeSlide
  379. mt_Return2
  380.     RTS
  381.  
  382. mt_PerNop
  383.     MOVE.W    n_period(A6),6(A5)
  384.     RTS
  385.  
  386. mt_Arpeggio
  387.     MOVEQ    #0,D0
  388.     MOVE.B    mt_counter(PC),D0
  389.     DIVS    #3,D0
  390.     SWAP    D0
  391.     CMP.W    #0,D0
  392.     BEQ.S    mt_Arpeggio2
  393.     CMP.W    #2,D0
  394.     BEQ.S    mt_Arpeggio1
  395.     MOVEQ    #0,D0
  396.     MOVE.B    n_cmdlo(A6),D0
  397.     LSR.B    #4,D0
  398.     BRA.S    mt_Arpeggio3
  399.  
  400. mt_Arpeggio1
  401.     MOVEQ    #0,D0
  402.     MOVE.B    n_cmdlo(A6),D0
  403.     AND.B    #15,D0
  404.     BRA.S    mt_Arpeggio3
  405.  
  406. mt_Arpeggio2
  407.     MOVE.W    n_period(A6),D2
  408.     BRA.S    mt_Arpeggio4
  409.  
  410. mt_Arpeggio3
  411.     ASL.W    #1,D0
  412.     MOVEQ    #0,D1
  413.     MOVE.B    n_finetune(A6),D1
  414.     MULU    #36*2,D1
  415.     LEA    mt_PeriodTable(PC),A0
  416.     ADD.L    D1,A0
  417.     MOVEQ    #0,D1
  418.     MOVE.W    n_period(A6),D1
  419.     MOVEQ    #36,D7
  420. mt_arploop
  421.     MOVE.W    (A0,D0.W),D2
  422.     CMP.W    (A0),D1
  423.     BHS.S    mt_Arpeggio4
  424.     ADDQ.L    #2,A0
  425.     DBRA    D7,mt_arploop
  426.     RTS
  427.  
  428. mt_Arpeggio4
  429.     MOVE.W    D2,6(A5)
  430.     RTS
  431.  
  432. mt_FinePortaUp
  433.     TST.B    mt_counter
  434.     BNE.S    mt_Return2
  435.     MOVE.B    #$0F,mt_LowMask
  436. mt_PortaUp
  437.     MOVEQ    #0,D0
  438.     MOVE.B    n_cmdlo(A6),D0
  439.     AND.B    mt_LowMask(PC),D0
  440.     MOVE.B    #$FF,mt_LowMask
  441.     SUB.W    D0,n_period(A6)
  442.     MOVE.W    n_period(A6),D0
  443.     AND.W    #$0FFF,D0
  444.     CMP.W    #113,D0
  445.     BPL.S    mt_PortaUskip
  446.     AND.W    #$F000,n_period(A6)
  447.     OR.W    #113,n_period(A6)
  448. mt_PortaUskip
  449.     MOVE.W    n_period(A6),D0
  450.     AND.W    #$0FFF,D0
  451.     MOVE.W    D0,6(A5)
  452.     RTS    
  453.  
  454. mt_FinePortaDown
  455.     TST.B    mt_counter
  456.     BNE    mt_Return2
  457.     MOVE.B    #$0F,mt_LowMask
  458. mt_PortaDown
  459.     CLR.W    D0
  460.     MOVE.B    n_cmdlo(A6),D0
  461.     AND.B    mt_LowMask(PC),D0
  462.     MOVE.B    #$FF,mt_LowMask
  463.     ADD.W    D0,n_period(A6)
  464.     MOVE.W    n_period(A6),D0
  465.     AND.W    #$0FFF,D0
  466.     CMP.W    #856,D0
  467.     BMI.S    mt_PortaDskip
  468.     AND.W    #$F000,n_period(A6)
  469.     OR.W    #856,n_period(A6)
  470. mt_PortaDskip
  471.     MOVE.W    n_period(A6),D0
  472.     AND.W    #$0FFF,D0
  473.     MOVE.W    D0,6(A5)
  474.     RTS
  475.  
  476. mt_SetTonePorta
  477.     MOVE.L    A0,-(SP)
  478.     MOVE.W    (A6),D2
  479.     AND.W    #$0FFF,D2
  480.     MOVEQ    #0,D0
  481.     MOVE.B    n_finetune(A6),D0
  482.     MULU    #37*2,D0
  483.     LEA    mt_PeriodTable(PC),A0
  484.     ADD.L    D0,A0
  485.     MOVEQ    #0,D0
  486. mt_StpLoop
  487.     CMP.W    (A0,D0.W),D2
  488.     BHS.S    mt_StpFound
  489.     ADDQ.W    #2,D0
  490.     CMP.W    #37*2,D0
  491.     BLO.S    mt_StpLoop
  492.     MOVEQ    #35*2,D0
  493. mt_StpFound
  494.     MOVE.B    n_finetune(A6),D2
  495.     AND.B    #8,D2
  496.     BEQ.S    mt_StpGoss
  497.     TST.W    D0
  498.     BEQ.S    mt_StpGoss
  499.     SUBQ.W    #2,D0
  500. mt_StpGoss
  501.     MOVE.W    (A0,D0.W),D2
  502.     MOVE.L    (SP)+,A0
  503.     MOVE.W    D2,n_wantedperiod(A6)
  504.     MOVE.W    n_period(A6),D0
  505.     CLR.B    n_toneportdirec(A6)
  506.     CMP.W    D0,D2
  507.     BEQ.S    mt_ClearTonePorta
  508.     BGE    mt_Return2
  509.     MOVE.B    #1,n_toneportdirec(A6)
  510.     RTS
  511.  
  512. mt_ClearTonePorta
  513.     CLR.W    n_wantedperiod(A6)
  514.     RTS
  515.  
  516. mt_TonePortamento
  517.     MOVE.B    n_cmdlo(A6),D0
  518.     BEQ.S    mt_TonePortNoChange
  519.     MOVE.B    D0,n_toneportspeed(A6)
  520.     CLR.B    n_cmdlo(A6)
  521. mt_TonePortNoChange
  522.     TST.W    n_wantedperiod(A6)
  523.     BEQ    mt_Return2
  524.     MOVEQ    #0,D0
  525.     MOVE.B    n_toneportspeed(A6),D0
  526.     TST.B    n_toneportdirec(A6)
  527.     BNE.S    mt_TonePortaUp
  528. mt_TonePortaDown
  529.     ADD.W    D0,n_period(A6)
  530.     MOVE.W    n_wantedperiod(A6),D0
  531.     CMP.W    n_period(A6),D0
  532.     BGT.S    mt_TonePortaSetPer
  533.     MOVE.W    n_wantedperiod(A6),n_period(A6)
  534.     CLR.W    n_wantedperiod(A6)
  535.     BRA.S    mt_TonePortaSetPer
  536.  
  537. mt_TonePortaUp
  538.     SUB.W    D0,n_period(A6)
  539.     MOVE.W    n_wantedperiod(A6),D0
  540.     CMP.W    n_period(A6),D0
  541.     BLT.S    mt_TonePortaSetPer
  542.     MOVE.W    n_wantedperiod(A6),n_period(A6)
  543.     CLR.W    n_wantedperiod(A6)
  544.  
  545. mt_TonePortaSetPer
  546.     MOVE.W    n_period(A6),D2
  547.     MOVE.B    n_glissfunk(A6),D0
  548.     AND.B    #$0F,D0
  549.     BEQ.S    mt_GlissSkip
  550.     MOVEQ    #0,D0
  551.     MOVE.B    n_finetune(A6),D0
  552.     MULU    #36*2,D0
  553.     LEA    mt_PeriodTable(PC),A0
  554.     ADD.L    D0,A0
  555.     MOVEQ    #0,D0
  556. mt_GlissLoop
  557.     CMP.W    (A0,D0.W),D2
  558.     BHS.S    mt_GlissFound
  559.     ADDQ.W    #2,D0
  560.     CMP.W    #36*2,D0
  561.     BLO.S    mt_GlissLoop
  562.     MOVEQ    #35*2,D0
  563. mt_GlissFound
  564.     MOVE.W    (A0,D0.W),D2
  565. mt_GlissSkip
  566.     MOVE.W    D2,6(A5) ; Set period
  567.     RTS
  568.  
  569. mt_Vibrato
  570.     MOVE.B    n_cmdlo(A6),D0
  571.     BEQ.S    mt_Vibrato2
  572.     MOVE.B    n_vibratocmd(A6),D2
  573.     AND.B    #$0F,D0
  574.     BEQ.S    mt_vibskip
  575.     AND.B    #$F0,D2
  576.     OR.B    D0,D2
  577. mt_vibskip
  578.     MOVE.B    n_cmdlo(A6),D0
  579.     AND.B    #$F0,D0
  580.     BEQ.S    mt_vibskip2
  581.     AND.B    #$0F,D2
  582.     OR.B    D0,D2
  583. mt_vibskip2
  584.     MOVE.B    D2,n_vibratocmd(A6)
  585. mt_Vibrato2
  586.     MOVE.B    n_vibratopos(A6),D0
  587.     LEA    mt_VibratoTable(PC),A4
  588.     LSR.W    #2,D0
  589.     AND.W    #$001F,D0
  590.     MOVEQ    #0,D2
  591.     MOVE.B    n_wavecontrol(A6),D2
  592.     AND.B    #$03,D2
  593.     BEQ.S    mt_vib_sine
  594.     LSL.B    #3,D0
  595.     CMP.B    #1,D2
  596.     BEQ.S    mt_vib_rampdown
  597.     MOVE.B    #255,D2
  598.     BRA.S    mt_vib_set
  599. mt_vib_rampdown
  600.     TST.B    n_vibratopos(A6)
  601.     BPL.S    mt_vib_rampdown2
  602.     MOVE.B    #255,D2
  603.     SUB.B    D0,D2
  604.     BRA.S    mt_vib_set
  605. mt_vib_rampdown2
  606.     MOVE.B    D0,D2
  607.     BRA.S    mt_vib_set
  608. mt_vib_sine
  609.     MOVE.B    0(A4,D0.W),D2
  610. mt_vib_set
  611.     MOVE.B    n_vibratocmd(A6),D0
  612.     AND.W    #15,D0
  613.     MULU    D0,D2
  614.     LSR.W    #7,D2
  615.     MOVE.W    n_period(A6),D0
  616.     TST.B    n_vibratopos(A6)
  617.     BMI.S    mt_VibratoNeg
  618.     ADD.W    D2,D0
  619.     BRA.S    mt_Vibrato3
  620. mt_VibratoNeg
  621.     SUB.W    D2,D0
  622. mt_Vibrato3
  623.     MOVE.W    D0,6(A5)
  624.     MOVE.B    n_vibratocmd(A6),D0
  625.     LSR.W    #2,D0
  626.     AND.W    #$003C,D0
  627.     ADD.B    D0,n_vibratopos(A6)
  628.     RTS
  629.  
  630. mt_TonePlusVolSlide
  631.     BSR    mt_TonePortNoChange
  632.     BRA    mt_VolumeSlide
  633.  
  634. mt_VibratoPlusVolSlide
  635.     BSR.S    mt_Vibrato2
  636.     BRA    mt_VolumeSlide
  637.  
  638. mt_Tremolo
  639.     MOVE.B    n_cmdlo(A6),D0
  640.     BEQ.S    mt_Tremolo2
  641.     MOVE.B    n_tremolocmd(A6),D2
  642.     AND.B    #$0F,D0
  643.     BEQ.S    mt_treskip
  644.     AND.B    #$F0,D2
  645.     OR.B    D0,D2
  646. mt_treskip
  647.     MOVE.B    n_cmdlo(A6),D0
  648.     AND.B    #$F0,D0
  649.     BEQ.S    mt_treskip2
  650.     AND.B    #$0F,D2
  651.     OR.B    D0,D2
  652. mt_treskip2
  653.     MOVE.B    D2,n_tremolocmd(A6)
  654. mt_Tremolo2
  655.     MOVE.B    n_tremolopos(A6),D0
  656.     LEA    mt_VibratoTable(PC),A4
  657.     LSR.W    #2,D0
  658.     AND.W    #$001F,D0
  659.     MOVEQ    #0,D2
  660.     MOVE.B    n_wavecontrol(A6),D2
  661.     LSR.B    #4,D2
  662.     AND.B    #$03,D2
  663.     BEQ.S    mt_tre_sine
  664.     LSL.B    #3,D0
  665.     CMP.B    #1,D2
  666.     BEQ.S    mt_tre_rampdown
  667.     MOVE.B    #255,D2
  668.     BRA.S    mt_tre_set
  669. mt_tre_rampdown
  670.     TST.B    n_vibratopos(A6)
  671.     BPL.S    mt_tre_rampdown2
  672.     MOVE.B    #255,D2
  673.     SUB.B    D0,D2
  674.     BRA.S    mt_tre_set
  675. mt_tre_rampdown2
  676.     MOVE.B    D0,D2
  677.     BRA.S    mt_tre_set
  678. mt_tre_sine
  679.     MOVE.B    0(A4,D0.W),D2
  680. mt_tre_set
  681.     MOVE.B    n_tremolocmd(A6),D0
  682.     AND.W    #15,D0
  683.     MULU    D0,D2
  684.     LSR.W    #6,D2
  685.     MOVEQ    #0,D0
  686.     MOVE.B    n_volume(A6),D0
  687.     TST.B    n_tremolopos(A6)
  688.     BMI.S    mt_TremoloNeg
  689.     ADD.W    D2,D0
  690.     BRA.S    mt_Tremolo3
  691. mt_TremoloNeg
  692.     SUB.W    D2,D0
  693. mt_Tremolo3
  694.     BPL.S    mt_TremoloSkip
  695.     CLR.W    D0
  696. mt_TremoloSkip
  697.     CMP.W    #$40,D0
  698.     BLS.S    mt_TremoloOk
  699.     MOVE.W    #$40,D0
  700. mt_TremoloOk
  701.     MOVE.W    D0,8(A5)
  702.     MOVE.B    n_tremolocmd(A6),D0
  703.     LSR.W    #2,D0
  704.     AND.W    #$003C,D0
  705.     ADD.B    D0,n_tremolopos(A6)
  706.     RTS
  707.  
  708. mt_SampleOffset
  709.     MOVEQ    #0,D0
  710.     MOVE.B    n_cmdlo(A6),D0
  711.     BEQ.S    mt_sononew
  712.     MOVE.B    D0,n_sampleoffset(A6)
  713. mt_sononew
  714.     MOVE.B    n_sampleoffset(A6),D0
  715.     LSL.W    #7,D0
  716.     CMP.W    n_length(A6),D0
  717.     BGE.S    mt_sofskip
  718.     SUB.W    D0,n_length(A6)
  719.     LSL.W    #1,D0
  720.     ADD.L    D0,n_start(A6)
  721.     RTS
  722. mt_sofskip
  723.     MOVE.W    #$0001,n_length(A6)
  724.     RTS
  725.  
  726. mt_VolumeSlide
  727.     MOVEQ    #0,D0
  728.     MOVE.B    n_cmdlo(A6),D0
  729.     LSR.B    #4,D0
  730.     TST.B    D0
  731.     BEQ.S    mt_VolSlideDown
  732. mt_VolSlideUp
  733.     ADD.B    D0,n_volume(A6)
  734.     CMP.B    #$40,n_volume(A6)
  735.     BMI.S    mt_vsuskip
  736.     MOVE.B    #$40,n_volume(A6)
  737. mt_vsuskip
  738.     MOVE.B    n_volume(A6),D0
  739.     MOVE.W    D0,8(A5)
  740.     RTS
  741.  
  742. mt_VolSlideDown
  743.     MOVEQ    #0,D0
  744.     MOVE.B    n_cmdlo(A6),D0
  745.     AND.B    #$0F,D0
  746. mt_VolSlideDown2
  747.     SUB.B    D0,n_volume(A6)
  748.     BPL.S    mt_vsdskip
  749.     CLR.B    n_volume(A6)
  750. mt_vsdskip
  751.     MOVE.B    n_volume(A6),D0
  752.     MOVE.W    D0,8(A5)
  753.     RTS
  754.  
  755. mt_PositionJump
  756.     MOVE.B    n_cmdlo(A6),D0
  757.     SUBQ.B    #1,D0
  758.     MOVE.B    D0,mt_SongPos
  759. mt_pj2    CLR.B    mt_PBreakPos
  760.     ST     mt_PosJumpFlag
  761.     RTS
  762.  
  763. mt_VolumeChange
  764.     MOVEQ    #0,D0
  765.     MOVE.B    n_cmdlo(A6),D0
  766.     CMP.B    #$40,D0
  767.     BLS.S    mt_VolumeOk
  768.     MOVEQ    #$40,D0
  769. mt_VolumeOk
  770.     MOVE.B    D0,n_volume(A6)
  771.     MOVE.W    D0,8(A5)
  772.     RTS
  773.  
  774. mt_PatternBreak
  775.     MOVEQ    #0,D0
  776.     MOVE.B    n_cmdlo(A6),D0
  777.     MOVE.L    D0,D2
  778.     LSR.B    #4,D0
  779.     MULU    #10,D0
  780.     AND.B    #$0F,D2
  781.     ADD.B    D2,D0
  782.     CMP.B    #63,D0
  783.     BHI.S    mt_pj2
  784.     MOVE.B    D0,mt_PBreakPos
  785.     ST    mt_PosJumpFlag
  786.     RTS
  787.  
  788. mt_SetSpeed
  789.     MOVE.B    3(A6),D0
  790.     BEQ    mt_Return2
  791.     CLR.B    mt_counter
  792.     MOVE.B    D0,mt_speed
  793.     RTS
  794.  
  795. mt_CheckMoreEfx
  796.     BSR    mt_UpdateFunk
  797.     MOVE.B    2(A6),D0
  798.     AND.B    #$0F,D0
  799.     CMP.B    #$9,D0
  800.     BEQ    mt_SampleOffset
  801.     CMP.B    #$B,D0
  802.     BEQ    mt_PositionJump
  803.     CMP.B    #$D,D0
  804.     BEQ.S    mt_PatternBreak
  805.     CMP.B    #$E,D0
  806.     BEQ.S    mt_E_Commands
  807.     CMP.B    #$F,D0
  808.     BEQ.S    mt_SetSpeed
  809.     CMP.B    #$C,D0
  810.     BEQ    mt_VolumeChange
  811.     RTS    
  812.  
  813. mt_E_Commands
  814.     MOVE.B    n_cmdlo(A6),D0
  815.     AND.B    #$F0,D0
  816.     LSR.B    #4,D0
  817.     BEQ.S    mt_FilterOnOff
  818.     CMP.B    #1,D0
  819.     BEQ    mt_FinePortaUp
  820.     CMP.B    #2,D0
  821.     BEQ    mt_FinePortaDown
  822.     CMP.B    #3,D0
  823.     BEQ.S    mt_SetGlissControl
  824.     CMP.B    #4,D0
  825.     BEQ    mt_SetVibratoControl
  826.     CMP.B    #5,D0
  827.     BEQ    mt_SetFineTune
  828.     CMP.B    #6,D0
  829.     BEQ    mt_JumpLoop
  830.     CMP.B    #7,D0
  831.     BEQ    mt_SetTremoloControl
  832.     CMP.B    #9,D0
  833.     BEQ    mt_RetrigNote
  834.     CMP.B    #$A,D0
  835.     BEQ    mt_VolumeFineUp
  836.     CMP.B    #$B,D0
  837.     BEQ    mt_VolumeFineDown
  838.     CMP.B    #$C,D0
  839.     BEQ    mt_NoteCut
  840.     CMP.B    #$D,D0
  841.     BEQ    mt_NoteDelay
  842.     CMP.B    #$E,D0
  843.     BEQ    mt_PatternDelay
  844.     CMP.B    #$F,D0
  845.     BEQ    mt_FunkIt
  846.     RTS
  847.  
  848. mt_FilterOnOff
  849.     MOVE.B    n_cmdlo(A6),D0
  850.     AND.B    #1,D0
  851.     ASL.B    #1,D0
  852.     AND.B    #$FD,$BFE001
  853.     OR.B    D0,$BFE001
  854.     RTS    
  855.  
  856. mt_SetGlissControl
  857.     MOVE.B    n_cmdlo(A6),D0
  858.     AND.B    #$0F,D0
  859.     AND.B    #$F0,n_glissfunk(A6)
  860.     OR.B    D0,n_glissfunk(A6)
  861.     RTS
  862.  
  863. mt_SetVibratoControl
  864.     MOVE.B    n_cmdlo(A6),D0
  865.     AND.B    #$0F,D0
  866.     AND.B    #$F0,n_wavecontrol(A6)
  867.     OR.B    D0,n_wavecontrol(A6)
  868.     RTS
  869.  
  870. mt_SetFineTune
  871.     MOVE.B    n_cmdlo(A6),D0
  872.     AND.B    #$0F,D0
  873.     MOVE.B    D0,n_finetune(A6)
  874.     RTS
  875.  
  876. mt_JumpLoop
  877.     TST.B    mt_counter
  878.     BNE    mt_Return2
  879.     MOVE.B    n_cmdlo(A6),D0
  880.     AND.B    #$0F,D0
  881.     BEQ.S    mt_SetLoop
  882.     TST.B    n_loopcount(A6)
  883.     BEQ.S    mt_jumpcnt
  884.     SUBQ.B    #1,n_loopcount(A6)
  885.     BEQ    mt_Return2
  886. mt_jmploop    MOVE.B    n_pattpos(A6),mt_PBreakPos
  887.     ST    mt_PBreakFlag
  888.     RTS
  889.  
  890. mt_jumpcnt
  891.     MOVE.B    D0,n_loopcount(A6)
  892.     BRA.S    mt_jmploop
  893.  
  894. mt_SetLoop
  895.     MOVE.W    mt_PattPos(PC),D0
  896.     LSR.W    #4,D0
  897.     MOVE.B    D0,n_pattpos(A6)
  898.     RTS
  899.  
  900. mt_SetTremoloControl
  901.     MOVE.B    n_cmdlo(A6),D0
  902.     AND.B    #$0F,D0
  903.     LSL.B    #4,D0
  904.     AND.B    #$0F,n_wavecontrol(A6)
  905.     OR.B    D0,n_wavecontrol(A6)
  906.     RTS
  907.  
  908. mt_RetrigNote
  909.     MOVE.L    D1,-(SP)
  910.     MOVEQ    #0,D0
  911.     MOVE.B    n_cmdlo(A6),D0
  912.     AND.B    #$0F,D0
  913.     BEQ.S    mt_rtnend
  914.     MOVEQ    #0,D1
  915.     MOVE.B    mt_counter(PC),D1
  916.     BNE.S    mt_rtnskp
  917.     MOVE.W    (A6),D1
  918.     AND.W    #$0FFF,D1
  919.     BNE.S    mt_rtnend
  920.     MOVEQ    #0,D1
  921.     MOVE.B    mt_counter(PC),D1
  922. mt_rtnskp
  923.     DIVU    D0,D1
  924.     SWAP    D1
  925.     TST.W    D1
  926.     BNE.S    mt_rtnend
  927. mt_DoRetrig
  928.     MOVE.W    n_dmabit(A6),$DFF096    ; Channel DMA off
  929.     MOVE.L    n_start(A6),(A5)    ; Set sampledata pointer
  930.     MOVE.W    n_length(A6),4(A5)    ; Set length
  931.     MOVE.W    #DMAWait,D0
  932. mt_rtnloop1
  933.     DBRA    D0,mt_rtnloop1
  934.     MOVE.W    n_dmabit(A6),D0
  935.     BSET    #15,D0
  936.     MOVE.W    D0,$DFF096
  937.     MOVE.W    #DMAWait,D0
  938. mt_rtnloop2
  939.     DBRA    D0,mt_rtnloop2
  940.     MOVE.L    n_loopstart(A6),(A5)
  941.     MOVE.L    n_replen(A6),4(A5)
  942. mt_rtnend
  943.     MOVE.L    (SP)+,D1
  944.     RTS
  945.  
  946. mt_VolumeFineUp
  947.     TST.B    mt_counter
  948.     BNE    mt_Return2
  949.     MOVEQ    #0,D0
  950.     MOVE.B    n_cmdlo(A6),D0
  951.     AND.B    #$F,D0
  952.     BRA    mt_VolSlideUp
  953.  
  954. mt_VolumeFineDown
  955.     TST.B    mt_counter
  956.     BNE    mt_Return2
  957.     MOVEQ    #0,D0
  958.     MOVE.B    n_cmdlo(A6),D0
  959.     AND.B    #$0F,D0
  960.     BRA    mt_VolSlideDown2
  961.  
  962. mt_NoteCut
  963.     MOVEQ    #0,D0
  964.     MOVE.B    n_cmdlo(A6),D0
  965.     AND.B    #$0F,D0
  966.     CMP.B    mt_counter(PC),D0
  967.     BNE    mt_Return2
  968.     CLR.B    n_volume(A6)
  969.     MOVE.W    #0,8(A5)
  970.     RTS
  971.  
  972. mt_NoteDelay
  973.     MOVEQ    #0,D0
  974.     MOVE.B    n_cmdlo(A6),D0
  975.     AND.B    #$0F,D0
  976.     CMP.B    mt_Counter,D0
  977.     BNE    mt_Return2
  978.     MOVE.W    (A6),D0
  979.     BEQ    mt_Return2
  980.     MOVE.L    D1,-(SP)
  981.     BRA    mt_DoRetrig
  982.  
  983. mt_PatternDelay
  984.     TST.B    mt_counter
  985.     BNE    mt_Return2
  986.     MOVEQ    #0,D0
  987.     MOVE.B    n_cmdlo(A6),D0
  988.     AND.B    #$0F,D0
  989.     TST.B    mt_PattDelTime2
  990.     BNE    mt_Return2
  991.     ADDQ.B    #1,D0
  992.     MOVE.B    D0,mt_PattDelTime
  993.     RTS
  994.  
  995. mt_FunkIt
  996.     TST.B    mt_counter
  997.     BNE    mt_Return2
  998.     MOVE.B    n_cmdlo(A6),D0
  999.     AND.B    #$0F,D0
  1000.     LSL.B    #4,D0
  1001.     AND.B    #$0F,n_glissfunk(A6)
  1002.     OR.B    D0,n_glissfunk(A6)
  1003.     TST.B    D0
  1004.     BEQ    mt_Return2
  1005. mt_UpdateFunk
  1006.     MOVEM.L    A0/D1,-(SP)
  1007.     MOVEQ    #0,D0
  1008.     MOVE.B    n_glissfunk(A6),D0
  1009.     LSR.B    #4,D0
  1010.     BEQ.S    mt_funkend
  1011.     LEA    mt_FunkTable(PC),A0
  1012.     MOVE.B    (A0,D0.W),D0
  1013.     ADD.B    D0,n_funkoffset(A6)
  1014.     BTST    #7,n_funkoffset(A6)
  1015.     BEQ.S    mt_funkend
  1016.     CLR.B    n_funkoffset(A6)
  1017.  
  1018.     CLR.B    n_funkoffset(A6)
  1019.     MOVE.L    n_loopstart(A6),D0
  1020.     MOVEQ    #0,D1
  1021.     MOVE.W    n_replen(A6),D1
  1022.     ADD.L    D1,D0
  1023.     ADD.L    D1,D0
  1024.     MOVE.L    n_wavestart(A6),A0
  1025.     ADDQ.L    #1,A0
  1026.     CMP.L    D0,A0
  1027.     BLO.S    mt_funkok
  1028.     MOVE.L    n_loopstart(A6),A0
  1029. mt_funkok
  1030.     MOVE.L    A0,n_wavestart(A6)
  1031.     MOVEQ    #-1,D0
  1032.     SUB.B    (A0),D0
  1033.     MOVE.B    D0,(A0)
  1034. mt_funkend
  1035.     MOVEM.L    (SP)+,A0/D1
  1036.     RTS
  1037.  
  1038.  
  1039. mt_FunkTable dc.b 0,5,6,7,8,10,11,13,16,19,22,26,32,43,64,128
  1040.  
  1041. mt_VibratoTable    
  1042.     dc.b   0, 24, 49, 74, 97,120,141,161
  1043.     dc.b 180,197,212,224,235,244,250,253
  1044.     dc.b 255,253,250,244,235,224,212,197
  1045.     dc.b 180,161,141,120, 97, 74, 49, 24
  1046.  
  1047. mt_PeriodTable
  1048. ; Tuning 0, Normal
  1049.     dc.w    856,808,762,720,678,640,604,570,538,508,480,453
  1050.     dc.w    428,404,381,360,339,320,302,285,269,254,240,226
  1051.     dc.w    214,202,190,180,170,160,151,143,135,127,120,113
  1052. ; Tuning 1
  1053.     dc.w    850,802,757,715,674,637,601,567,535,505,477,450
  1054.     dc.w    425,401,379,357,337,318,300,284,268,253,239,225
  1055.     dc.w    213,201,189,179,169,159,150,142,134,126,119,113
  1056. ; Tuning 2
  1057.     dc.w    844,796,752,709,670,632,597,563,532,502,474,447
  1058.     dc.w    422,398,376,355,335,316,298,282,266,251,237,224
  1059.     dc.w    211,199,188,177,167,158,149,141,133,125,118,112
  1060. ; Tuning 3
  1061.     dc.w    838,791,746,704,665,628,592,559,528,498,470,444
  1062.     dc.w    419,395,373,352,332,314,296,280,264,249,235,222
  1063.     dc.w    209,198,187,176,166,157,148,140,132,125,118,111
  1064. ; Tuning 4
  1065.     dc.w    832,785,741,699,660,623,588,555,524,495,467,441
  1066.     dc.w    416,392,370,350,330,312,294,278,262,247,233,220
  1067.     dc.w    208,196,185,175,165,156,147,139,131,124,117,110
  1068. ; Tuning 5
  1069.     dc.w    826,779,736,694,655,619,584,551,520,491,463,437
  1070.     dc.w    413,390,368,347,328,309,292,276,260,245,232,219
  1071.     dc.w    206,195,184,174,164,155,146,138,130,123,116,109
  1072. ; Tuning 6
  1073.     dc.w    820,774,730,689,651,614,580,547,516,487,460,434
  1074.     dc.w    410,387,365,345,325,307,290,274,258,244,230,217
  1075.     dc.w    205,193,183,172,163,154,145,137,129,122,115,109
  1076. ; Tuning 7
  1077.     dc.w    814,768,725,684,646,610,575,543,513,484,457,431
  1078.     dc.w    407,384,363,342,323,305,288,272,256,242,228,216
  1079.     dc.w    204,192,181,171,161,152,144,136,128,121,114,108
  1080. ; Tuning -8
  1081.     dc.w    907,856,808,762,720,678,640,604,570,538,508,480
  1082.     dc.w    453,428,404,381,360,339,320,302,285,269,254,240
  1083.     dc.w    226,214,202,190,180,170,160,151,143,135,127,120
  1084. ; Tuning -7
  1085.     dc.w    900,850,802,757,715,675,636,601,567,535,505,477
  1086.     dc.w    450,425,401,379,357,337,318,300,284,268,253,238
  1087.     dc.w    225,212,200,189,179,169,159,150,142,134,126,119
  1088. ; Tuning -6
  1089.     dc.w    894,844,796,752,709,670,632,597,563,532,502,474
  1090.     dc.w    447,422,398,376,355,335,316,298,282,266,251,237
  1091.     dc.w    223,211,199,188,177,167,158,149,141,133,125,118
  1092. ; Tuning -5
  1093.     dc.w    887,838,791,746,704,665,628,592,559,528,498,470
  1094.     dc.w    444,419,395,373,352,332,314,296,280,264,249,235
  1095.     dc.w    222,209,198,187,176,166,157,148,140,132,125,118
  1096. ; Tuning -4
  1097.     dc.w    881,832,785,741,699,660,623,588,555,524,494,467
  1098.     dc.w    441,416,392,370,350,330,312,294,278,262,247,233
  1099.     dc.w    220,208,196,185,175,165,156,147,139,131,123,117
  1100. ; Tuning -3
  1101.     dc.w    875,826,779,736,694,655,619,584,551,520,491,463
  1102.     dc.w    437,413,390,368,347,328,309,292,276,260,245,232
  1103.     dc.w    219,206,195,184,174,164,155,146,138,130,123,116
  1104. ; Tuning -2
  1105.     dc.w    868,820,774,730,689,651,614,580,547,516,487,460
  1106.     dc.w    434,410,387,365,345,325,307,290,274,258,244,230
  1107.     dc.w    217,205,193,183,172,163,154,145,137,129,122,115
  1108. ; Tuning -1
  1109.     dc.w    862,814,768,725,684,646,610,575,543,513,484,457
  1110.     dc.w    431,407,384,363,342,323,305,288,272,256,242,228
  1111.     dc.w    216,203,192,181,171,161,152,144,136,128,121,114
  1112.  
  1113. mt_chan1temp    dc.l    0,0,0,0,0,$00010000,0,  0,0,0,0
  1114. mt_chan2temp    dc.l    0,0,0,0,0,$00020000,0,  0,0,0,0
  1115. mt_chan3temp    dc.l    0,0,0,0,0,$00040000,0,  0,0,0,0
  1116. mt_chan4temp    dc.l    0,0,0,0,0,$00080000,0,  0,0,0,0
  1117.  
  1118. mt_SampleStarts    dc.l    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1119.         dc.l    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1120.  
  1121. mt_SongDataPtr    dc.l 0
  1122.  
  1123. mt_speed    dc.b 6
  1124. mt_counter    dc.b 0
  1125. mt_SongPos    dc.b 0
  1126. mt_PBreakPos    dc.b 0
  1127. mt_PosJumpFlag    dc.b 0
  1128. mt_PBreakFlag    dc.b 0
  1129. mt_LowMask    dc.b 0
  1130. mt_PattDelTime    dc.b 0
  1131. mt_PattDelTime2    dc.b 0
  1132.         dc.b 0
  1133.  
  1134. mt_PattPos    dc.w 0
  1135. mt_DMACONtemp    dc.w 0
  1136.  
  1137. mt_mulu        dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1138.         dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1139.  
  1140. ; END
  1141.